// Description: 描述
package xtime

import "time"

// 计算某月还剩多少秒
// offset 不传表示今周，负数表示往前offset周 整表示往后offset周
func MonthSurplusSec(offset ...int) int64 {
	t := time.Now()
	tmDay := subAtZeroTime(func() time.Time {
		return MonthEndTime()
	}).AddDate(0, 0, 1)

	return int64(tmDay.Sub(t).Seconds())
}

// 获取某月的开始时间
// offset 不传表示当月的，负数表示往前offset月的 整表示往后offset月的
func MonthStartTime(offset ...int) time.Time {
	n := time.Now()

	if len(offset) == 0 {
		offset = append(offset, int(n.Month()))
	} else {
		offset[0] += int(n.Month())
	}

	return time.Date(n.Year(), time.Month(offset[0]), 0, 0, 0, 0, 0, n.Location())
}

// 获取某月的结束时间
// offset 不传表示当月的，负数表示往前offset月的 整表示往后offset月的
func MonthEndTime(offset ...int) time.Time {
	n := time.Now()

	if len(offset) == 0 {
		offset = append(offset, int(n.Month()))
	} else {
		offset[0] += int(n.Month())
	}

	return time.Date(n.Year(), time.Month(offset[0]), 0, 23, 59, 59, 0, n.Location())
}
